Scaffold 脚手架

2022/11/21 Flutter组件

本文介绍Flutter的Scaffold脚手架的定义和用法。

# Scaffold 脚手架

Scaffold 是一个页面布局脚手架,实现了基本的 Material 布局,继承自 StatefulWidget,是有状态组件。我们知道大部分的应用页面都是含有标题栏,主体内容,底部导航菜单或者侧滑抽屉菜单等等构成,那么每次都重复写这些内容会大大降低开发效率,所以 Flutter 提供了 Material 风格的 Scaffold 页面布局脚手架,可以很快地搭建出这些元素部分。对应 ios 的是 CupertinoPageScaffold

  • 定义

    const Scaffold({
      Key key,
      // 菜单栏
      this.appBar,
      // 中间主体内容部分
      this.body,
      // 悬浮按钮
      this.floatingActionButton,
      // 悬浮按钮位置
      this.floatingActionButtonLocation,
      // 悬浮按钮动画
      this.floatingActionButtonAnimator,
      // 固定在下方显示的按钮
      this.persistentFooterButtons,
      // 左侧 侧滑抽屉菜单
      this.drawer,
      // 右侧 侧滑抽屉菜单
      this.endDrawer,
      // 底部菜单
      this.bottomNavigationBar,
      // 底部拉出菜单
      this.bottomSheet,
      // 背景色
      this.backgroundColor,
      // 自动适应底部padding
      this.resizeToAvoidBottomPadding,
      // 重新计算body布局空间大小,避免被遮挡
      this.resizeToAvoidBottomInset,
      // 是否显示到底部,默认为true将显示到顶部状态栏
      this.primary = true,
      this.drawerDragStartBehavior = DragStartBehavior.down,
    })
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
  • 示例

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      
      Widget build(BuildContext context) {
        return MaterialApp(
          // APP 标题
          // ios 没有用、 android 进程名称 、 web 标题tab栏名称
          title: 'Material App',
    
          // APP 颜色
          color: Colors.green,
    
          // 样式
          theme: ThemeData(
            primarySwatch: Colors.yellow,
          ),
    
          // 主机暗色模式
          darkTheme: ThemeData(
            primarySwatch: Colors.red,
          ),
    
          // 显示debug标记 右上角
          debugShowCheckedModeBanner: false,
    
          // 调试显示材质网格
          debugShowMaterialGrid: true,
    
          // 显示性能叠加
          // showPerformanceOverlay: true,
    
          // 检查缓存图片的情况
          // checkerboardRasterCacheImages: true,
    
          // 检查不必要的setlayer
          // checkerboardOffscreenLayers: true,
    
          // 显示语义调试器
          // showSemanticsDebugger: true,
    
          // 首页
          home: Scaffold(
            // 悬浮按钮
            floatingActionButton: FloatingActionButton(
              onPressed: () {},
              child: const Icon(Icons.add_photo_alternate),
            ),
    
            // 悬浮按钮位置
            floatingActionButtonLocation: FloatingActionButtonLocation.centerTop,
    
            // 固定在下方显示的按钮
            persistentFooterButtons: const [
              Icon(CupertinoIcons.share),
              Icon(CupertinoIcons.share),
            ],
    
            // 压缩顶部菜单空间
            primary: true,
    
            // 左侧 侧滑抽屉菜单
            drawer: const Drawer(
              child: Text('data'),
            ),
    
            // 右侧 侧滑抽屉菜单
            endDrawer: const Drawer(
              child: Text('data'),
            ),
    
            // 检测手势行为方式,与drawer配合使用 down 方式有卡顿,可以 start 方式
            // drawerDragStartBehavior: DragStartBehavior.start,
    
            // 底部导航栏
            bottomNavigationBar: const Text('bottomNavigationBar'),
    
            // 底部拉出菜单
            bottomSheet: const Text('bottomSheet'),
    
            // 背景色
            backgroundColor: Colors.grey[300],
    
            // 自动适应底部padding
            resizeToAvoidBottomInset: true,
    
            appBar: AppBar(
              title: const Text('Material App'),
            ),
            body: Center(
              child: Column(
                children: const [
                  Text("这是怎么回事"),
                  FlutterLogo(
                    size: 100,
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
最后更新时间: 2022/11/29 10:38:11